import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vite.dev/config/
export default defineConfig(({ mode }) => {
  // 加载 .env 文件
  const env = loadEnv(mode, process.cwd());
  
  return {
    plugins: [vue()],
    // 开发服务器配置
    server: {
      // 服务器配置
      port: 3000,
      open: true
    },
    // 定义全局常量替换，在构建时进行替换
    define: {
      // 确保 VITE_API_BASE_URL 在任何环境都可用
      'import.meta.env.VITE_API_BASE_URL': JSON.stringify(env.VITE_API_BASE_URL)
    },
    build: {
      // 代码分割优化
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true,
          drop_debugger: true,
          // 增加压缩速度的配置
          passes: 1  // 减少压缩通道次数，提高构建速度
        }
        // 注意: terser在Vite中不支持parallel选项
      },
      // 手动分块控制
      rollupOptions: {
        output: {
          // 更精细的代码分块策略
          manualChunks: (id) => {
            // 基础库分块
            if (id.includes('node_modules/vue/') || 
                id.includes('node_modules/@vue/') ||
                id.includes('node_modules/vue-router/')) {
              return 'vendor-vue'
            }
            
            // Element Plus UI库分块
            if (id.includes('node_modules/element-plus/') || 
                id.includes('node_modules/@element-plus/')) {
              return 'vendor-element'
            }
            
            // 状态管理库分块
            if (id.includes('node_modules/pinia/')) {
              return 'vendor-pinia'
            }
            
            // 工具库分块
            if (id.includes('node_modules/axios/') || 
                id.includes('node_modules/highlight.js/') ||
                id.includes('node_modules/markdown-it/')) {
              return 'vendor-utils'
            }
            
            // 管理组件分块 - 添加McpManager组件
            if (id.includes('/src/components/McpManager.vue')) {
              return 'admin-components'
            }
            
            // 视图组件分块
            if (id.includes('/src/views/') && !id.includes('Chat.vue')) {
              return 'views'
            }
            
            // 聊天相关组件单独分块
            if (id.includes('/src/views/Chat.vue') || 
                id.includes('/src/components/Chat')) {
              return 'chat-components'
            }
          },
          // 控制chunk文件输出的命名格式
          chunkFileNames: 'assets/js/[name]-[hash].js',
          entryFileNames: 'assets/js/[name]-[hash].js',
          assetFileNames: 'assets/[ext]/[name]-[hash].[ext]'
        }
      },
      // 分割CSS
      cssCodeSplit: true,
      // 提升警告阈值到较高的值
      chunkSizeWarningLimit: 1200,
      // 使用默认的dist目录作为输出
      outDir: 'dist',
      // 生成静态资源的存放目录
      assetsDir: 'assets',
      // 构建后是否生成 source map 文件
      sourcemap: false,
      // 添加构建性能优化选项
      target: 'es2015',  // 减少兼容性处理
      emptyOutDir: true, // 构建前清空输出目录
    },
    base: '/' 
  }
})
